
#include <iostream>
#include <cassert>

using namespace std;

// 改变 ref 对象的值会改变 ref 对象引用的值
template<typename T>
class ref
{
    T &a;

  public:
    ref(T &b) : a{b} {}
    void setValue(T v) {a = v;}
    T getValue() {return a;}
};

int
main()
{
    int a{10};
    ref<int> m(a);
    cout << a << "\n";
    // 
    m.setValue(5);
    cout << a << "\n";
    cout << m.getValue() << "\n";
    return 0;
}